from langchain_neo4j import Neo4jGraph
import os
from dotenv import load_dotenv


class CompanyNodeService:
    def __init__(self):
        load_dotenv()
        self.graph = Neo4jGraph(url=os.getenv("NEO4J_URI"), username=os.getenv("NEO4J_USER"),
                                password=os.getenv("NEO4J_PASSWORD"))

    # 创建节点
    def create_node(self, **kwargs):
        # 创建cypher语句
        cypher_str = """
            CREATE (p:企业 {
                上市代码: $上市代码,
                企业名称: $企业名称,
                信用评级: $信用评级,
                报告期: $报告期,
                主营业务: $主营业务,
                成立日期: $成立日期,
                注册资本: $注册资本,
                统一社会信用代码: $统一社会信用代码,
            })
            """
        self.graph.query(cypher_str, params=kwargs)

    # 查询节点
    def query_node(self, **kwargs):
        cypher_str = """
            MATCH (p:企业)
            RETURN 
                p.上市代码 AS 上市代码,
                p.企业名称 AS 企业名称,
                p.信用评级 AS 信用评级,
                p.报告期 AS 报告期,
                p.主营业务 AS 主营业务,
                p.成立日期 AS 成立日期,
                p.注册资本 AS 注册资本,
                p.上市状态 AS 上市状态,
                p.统一社会信用代码 AS 统一社会信用代码,
                p.市盈率 AS 市盈率
            """
        rs = self.graph.query(cypher_str)
        print(rs)
        return rs

    def delete_node(self, **kwargs):
        cypher_str = """
        MATCH (p:企业)
        WHERE {where_clause}  
        DETACH DELETE p       
        """
        self.graph.query(cypher_str, params=kwargs)
        print(f"已删除符合条件的Person节点：{kwargs}")

    # 更新节点
    def update_node(self, **kwargs):
        cypher_str = """
            MATCH (p:企业)
            WHERE p.企业名称 = $企业名称
            SET 
                p.上市代码 = $上市代码,
                p.信用评级 = $信用评级,
                p.报告期 = $报告期,
                p.主营业务 = $主营业务,
                p.成立日期 = $成立日期,
                p.注册资本 = $注册资本,
                p.统一社会信用代码 = $统一社会信用代码
            RETURN p
            """

        updated_node = self.graph.query(cypher_str, params=kwargs)
        print(f"已更新企业节点：{kwargs['企业名称']}")
        return updated_node


if __name__ == '__main__':
    pass
